package com.pond.pond.service;

import com.pond.pond.domain.CommunityPost;
import com.pond.pond.domain.CommunityPostComment;

import java.util.List;
import java.util.Map;

/**
 * 社区帖子Service接口
 *
 * @author ruoyi
 * @date 2024-03-15
 */
public interface ICommunityPostService {
    /**
     * 查询社区帖子列表
     *
     * @param communityPost 社区帖子
     * @param userId 当前用户ID（用于判断点赞收藏状态）
     * @return 社区帖子集合
     */
    List<CommunityPost> selectCommunityPostList(CommunityPost communityPost, Long userId);

    /**
     * 查询社区帖子详情
     *
     * @param id 社区帖子主键
     * @param userId 当前用户ID
     * @return 社区帖子
     */
    CommunityPost selectCommunityPostById(Long id, Long userId);

    /**
     * 新增社区帖子
     *
     * @param communityPost 社区帖子
     * @return 结果
     */
    int insertCommunityPost(CommunityPost communityPost);

    /**
     * 修改社区帖子
     *
     * @param communityPost 社区帖子
     * @return 结果
     */
    int updateCommunityPost(CommunityPost communityPost);

    /**
     * 批量删除社区帖子
     *
     * @param ids 需要删除的社区帖子主键集合
     * @return 结果
     */
    int deleteCommunityPostByIds(Long[] ids);

    /**
     * 删除社区帖子信息
     *
     * @param id 社区帖子主键
     * @return 结果
     */
    int deleteCommunityPostById(Long id);

    /**
     * 点赞/取消点赞帖子
     *
     * @param postId 帖子ID
     * @param userId 用户ID
     * @return 操作结果
     */
    Map<String, Object> toggleLike(Long postId, Long userId);

    /**
     * 收藏/取消收藏帖子
     *
     * @param postId 帖子ID
     * @param userId 用户ID
     * @return 操作结果
     */
    Map<String, Object> toggleFavorite(Long postId, Long userId);

    /**
     * 增加帖子阅读量
     *
     * @param postId 帖子ID
     * @return 新的阅读量
     */
    int incrementReadCount(Long postId);

    /**
     * 获取帖子评论列表
     *
     * @param postId 帖子ID
     * @param userId 当前用户ID
     * @return 评论列表
     */
    List<CommunityPostComment> selectCommentsByPostId(Long postId, Long userId);

    /**
     * 发表评论
     *
     * @param comment 评论信息
     * @return 评论ID
     */
    Long addComment(CommunityPostComment comment);

    /**
     * 删除评论
     *
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean deleteComment(Long commentId, Long userId);

    /**
     * 点赞/取消点赞评论
     *
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 操作结果
     */
    Map<String, Object> toggleCommentLike(Long commentId, Long userId);

    /**
     * 获取热门帖子
     *
     * @param limit 数量限制
     * @param type 排序类型：read-按阅读量，like-按点赞数，comment-按评论数
     * @return 热门帖子列表
     */
    List<CommunityPost> selectHotPosts(Integer limit, String type);

    /**
     * 获取用户收藏的帖子
     *
     * @param userId 用户ID
     * @return 收藏帖子列表
     */
    List<CommunityPost> selectUserFavorites(Long userId);

    /**
     * 获取用户发布的帖子
     *
     * @param userId 用户ID
     * @return 用户帖子列表
     */
    List<CommunityPost> selectUserPosts(Long userId);

    /**
     * 获取用户评论列表（包含帖子标题）
     *
     * @param userId 用户ID
     * @return 用户评论列表
     */
    List<Map<String, Object>> selectUserCommentsWithPostTitle(Long userId);
}